package cn.youqu.happy.module.youqu.service.userActivity;

import cn.youqu.happy.framework.common.pojo.PageResult;
import cn.youqu.happy.module.youqu.controller.admin.userActivity.vo.UserActivityCreateReqVO;
import cn.youqu.happy.module.youqu.controller.admin.userActivity.vo.UserActivityExportReqVO;
import cn.youqu.happy.module.youqu.controller.admin.userActivity.vo.UserActivityPageReqVO;
import cn.youqu.happy.module.youqu.controller.admin.userActivity.vo.UserActivityUpdateReqVO;
import cn.youqu.happy.module.youqu.controller.app.userActivity.vo.AppUserActivityCreateReqVO;
import cn.youqu.happy.module.youqu.controller.app.userActivity.vo.AppUserActivityQuickJoinReqVO;
import cn.youqu.happy.module.youqu.controller.app.userActivity.vo.AppUserActivityUpdateReqVO;
import cn.youqu.happy.module.youqu.dal.dataobject.userActivity.UserActivityDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 用户发起活动 Service 接口
 *
 * @author 王其岩 20112001045
 */
public interface UserActivityService {

    /**
     * 创建用户发起活动
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Integer createUserActivity(@Valid UserActivityCreateReqVO createReqVO);

    /**
     * 更新用户发起活动
     *
     * @param updateReqVO 更新信息
     */
    void updateUserActivity(@Valid UserActivityUpdateReqVO updateReqVO);

    /**
     * 删除用户发起活动
     *
     * @param id 编号
     */
    void deleteUserActivity(Integer id);

    /**
     * 获得用户发起活动
     *
     * @param id 编号
     * @return 用户发起活动
     */
    UserActivityDO getUserActivity(Integer id);

    /**
     * 获得用户发起活动列表
     *
     * @param ids 编号
     * @return 用户发起活动列表
     */
    List<UserActivityDO> getUserActivityList(Collection<Integer> ids);

    /**
     * 只能获取自己的活动列表
     *
     * @param ids
     * @param uid
     * @return
     */
    List<UserActivityDO> getUserActivityList(Collection<Integer> ids, Long uid);


    /**
     * 获得用户发起活动分页
     *
     * @param pageReqVO 分页查询
     * @return 用户发起活动分页
     */
    PageResult<UserActivityDO> getUserActivityPage(UserActivityPageReqVO pageReqVO);

    /**
     * 获取自己的分页
     *
     * @param pageReqVO
     * @param uid
     * @return
     */
    PageResult<UserActivityDO> getUserActivityPage(UserActivityPageReqVO pageReqVO, Long uid);


    /**
     * 获得用户发起活动列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 用户发起活动列表
     */
    List<UserActivityDO> getUserActivityList(UserActivityExportReqVO exportReqVO);

    /**
     * 用户发起活动组队
     *
     * @param createReqVO
     * @param uid
     * @return
     */
    Integer publishUserActivity(AppUserActivityCreateReqVO createReqVO, Long uid);

    /**
     * 队长更新战队
     *
     * @param updateReqVO
     * @param uid
     */
    void updateUserActivity(AppUserActivityUpdateReqVO updateReqVO, Long uid);

    /**
     * 队长取消战队
     *
     * @param id
     * @param uid
     * @return
     */
    boolean cancelUserActivity(Integer id, Long uid);

    /**
     * 用户强制取消战队
     *
     * @param id
     * @return
     */
    boolean forceCancelUserActivity(Integer id, String reason, Long userId);

    /**
     * 强制结束组队 任务达到最小人数 组队成功
     *
     * @param id
     * @param reason
     * @return
     */
    boolean forceSuccessUserActivity(Integer id, String reason, Long userId);

    /**
     * 踢人
     *
     * @param id
     * @param targetId 目标用户
     * @param userId   操作者
     * @return
     */
    boolean kickPartnerUserActivity(Integer id, Long targetId, Long userId);

    /**
     * 用户加入组队
     *
     * @param id
     * @param userId
     * @return
     */
    boolean joinUserActivity(Integer id, Long userId);

    /**
     * 退出组队
     *
     * @param id
     * @param userId
     * @return
     */
    boolean quitUserActivity(Integer id, Long userId);

    /**
     * 快速加入战队
     *
     * @param quickJoinReqVO
     * @param userId
     * @return
     */
    Integer quickJoinUserActivity(AppUserActivityQuickJoinReqVO quickJoinReqVO, Long userId);

    UserActivityDO getUserActivity(Integer id, Long loginUserId);

    //TODO 自动更新活动状态
}
